package main

import (
	"context"
	"fmt"
	"gq_volunteer_platform/bean"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func init() {
	// 配置项初始化
	bean.ConfigInit()
	// 日志初始化
	bean.LogInit()
	// mysql 初始化
	bean.MysqlInit()
	//11
}

func main() {
	// 创建 context 用于处理程序结束信号
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	// 监听系统信号，如Ctrl+C，以便优雅地停止程序
	go func() {
		signals := make(chan os.Signal, 1)
		signal.Notify(signals, syscall.SIGINT, syscall.SIGTERM)
		<-signals
		cancel()
	}()

	fmt.Println("程序已启动...")
	// 长时间运行的任务
	var ActivityTimes uint = 0
	var MessageQueueTimes uint = 0
	var RefreshAdminQrTicketTimes uint = 0

	for {
		select {
		case <-ctx.Done():
			fmt.Println("程序即将退出...")
			// 清理工作，如关闭数据库连接、释放资源等
			// ...
			return
		default:
			// fmt.Println("程序执行扫描一次", times)

			// activity 修改状态 积分计算
			if ActivityTimes >= 60 {
				// fmt.Println("程序执行执行一次")
				ActivityTimes = 0
				// 开始活动
				if err := ActionStartActivity(); err != nil {
					bean.Log.Error(err)
				}

				// 结束活动
				if err := ActionFinishActivity(); err != nil {
					bean.Log.Error(err)
				}
			}

			// 发送短信队列
			if MessageQueueTimes >= 10 {
				MessageQueueTimes = 0
				// 开始发送
				if err := ActionMessageQueue(); err != nil {
					bean.Log.Error(err)
				}
			}

			// 清除过期的管理员二维码ticket
			if RefreshAdminQrTicketTimes >= 140 {
				RefreshAdminQrTicketTimes = 0
				// 清除过期的管理员二维码ticket
				if err := ActionRefreshAdminQrTicket(); err != nil {
					bean.Log.Error(err)
				}
			}

		}

		ActivityTimes += 1
		MessageQueueTimes += 1
		RefreshAdminQrTicketTimes += 1
		time.Sleep(1 * time.Second) // 模拟工作
	}
}
